package fiuba.algo3.caso;

import fiuba.algo3.Sospechoso;
import fiuba.algo3.mundo.Pais;
import fiuba.algo3.mundo.Mundo;

public class RutaDeEscape {
	
	private Pais[] rutaDeEscape;

	public RutaDeEscape(Mundo mundo)
	{
		int cantidadPaises = 7;
		
		this.rutaDeEscape = mundo.obtenerSecuenciaPaisesConectados(cantidadPaises);
	}

	public Pais obtenerPaisInicial()
	{
		return this.rutaDeEscape[0];
	}

	public void ajustarLongitud(int largoRuta)
	{
		Pais[] listaPaisesAux = new Pais[largoRuta];
		
		System.arraycopy(rutaDeEscape, 0, listaPaisesAux, 0, largoRuta);
		this.rutaDeEscape = listaPaisesAux;
	}
	
	public int obtenerLargoRuta()
	{
		// Para las pruebas.
		return this.rutaDeEscape.length;
	}

	public Pais obtenerUltimoPais()
	{
		return this.rutaDeEscape[obtenerLargoRuta()-1];
	}

	public boolean esPaisIntermedio(Pais pais) {
		int i;
		
		for(i=0; i<this.obtenerLargoRuta()-1; i++){
			if (rutaDeEscape[i].esElMismoQue(pais)){
				return true;
			}
		}
		return false;
	}

	public boolean esPaisFinal(Pais pais) {
		if (pais.esElMismoQue(this.obtenerUltimoPais())){
			return true;
		}
		return false;
	}

	public Pais obtenerSiguientePais(Pais pais) {
		int i = 0;
		
		for (i=0; i<this.obtenerLargoRuta(); i++){
			if (this.rutaDeEscape[i].esElMismoQue(pais)){
				return this.rutaDeEscape[i+1]; 
			}
		}
		return null;
	}

	public void asignarLugares(Sospechoso culpable)
	{
		int i;

		for (i=0; i<this.obtenerLargoRuta()-1; i++)
			rutaDeEscape[i].asignarLugaresIntermedios(rutaDeEscape[i+1], culpable.obtenerPistaAleatoria());

		this.obtenerUltimoPais().asignarLugaresFinales();
	}
}
